#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time   : 2022/9/8 15:55
# @Author : cjw
import os
import time

from loguru import logger

from api_wework.setting import LOG_PATH, LOG_NOW_PATH

# 环境数据
global_env = {}


def pytest_addoption(parser):
    """
    hook函数，是添加命令行参数使用
    :param parser:
    :return:
    """
    # group 将下面所有的 option都展示在这个group下。
    mygroup = parser.getgroup("hogwarts")
    # 注册一个命令行选项
    mygroup.addoption("--interface_env",
                      # 参数的默认值
                      default='test',
                      # 存储的变量
                      dest='env',
                      # 参数的描述信息
                      help='设置接口自动化测试默认的环境'
                      )


def pytest_configure(config):
    """
    hook函数，获取命令行参数值
    :param config:
    :return:
    """
    default_env = config.getoption("--interface_env")
    tmp = {"env": default_env}
    global_env.update(tmp)


def pytest_collection_modifyitems(items):
    """
    测试用例收集完成时，将收集到的用例的name和nodeid的中文显示在控制台上
    name: 用例的名称
    nodeid：用例的路径
    :param items: 收集到的所有用例
    :return:
    """
    for item in items:
        item.name = item.name.encode('utf-8').decode('unicode_escape')
        item._nodeid = item.nodeid.encode('utf-8').decode('unicode_escape')


def pytest_runtest_setup(item):
    """
    设置打印的目录文件
    :param item:
    :return:
    """
    # 如果日志文件目录不存在，就进行创建
    if not os.path.isdir(LOG_PATH):
        os.mkdir(LOG_PATH)

    # 如果当前日期日志文件目录不存在，就进行创建
    if not os.path.isdir(LOG_NOW_PATH):
        os.mkdir(LOG_NOW_PATH)

    # 设置某个案例执行的log文件，item.name: 当前执行案例的名称
    now = time.strftime("%Y_%m_%d_%H_%M_%S")
    log_name = os.path.join(LOG_NOW_PATH, f'{item.name}_{now}.log')
    logger.add(log_name, encoding='utf-8', enqueue=True)
